iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Mobile Development

如何成為IOS初級工程師系列 第 21

Day-21 高階函式 - Sort, Filter, Map, Reduce, Contains

  • 分享至 

  • xImage
  •  

今天要來教大家如何讓程式碼變的更簡潔,基本上這些都是可以用for迴圈寫出來的效果,但是會很冗長要花很多時間。使用高階函式可以簡化我們的開發邏輯,並專注在UI開發上面。當然函式遠不止上面那些,我今天來介紹一些最常用的函式。

進入正題

高階函式常常會搭配closure使用,所以要先了解一下閉包在做什麼哦~
今天會介紹

  • Sort
  • Fliter
  • Map
  • Reduce
  • Contains

Sort

較常使用在陣列,用來排序由小到大或是由大到小。如果是字串也可以從A排到Z。下面我們用程式碼來範例

var array = [9,8,7,1,2,4,3,5]   //創造一個陣列

array.sort()      // sort()回傳結果,並會把結果存回去原本的陣列
array             //回傳 [1,2,3,4,5,7,8,9]
array.sorted()    // sorted() 回傳結果,但不會影響原陣列
array             //回傳 [1,2,3,4,5,7,8,9]


array.sort(>)    //可以在括號使用>或<來表示由大到小還是由小到大。回傳 [9,8,7,5,4,3,2,1]

Filter

這是一個很好用的高階函式,用法跟英文意思一樣,是用來做篩選的。寫下你要篩選的條件,就會回傳結果。

var array = [9,8,7,1,2,4,3,5]   //創造一個陣列

let filterArray = array.filter{ $0 > 5 } 
//我們使用閉包表示,篩選陣列裡>5的數字,所以回傳 [9,8,7]

科普一下:$0是一個速記參數,用來參照原本集合中的任何元素。

Map

簡單來說會對原本的陣列進行你想要的條件操作,然後回傳一新的集合。

var array = [9,8,7,1,2,4,3,5]   //創造一個陣列

let mapArray = array.map{$0 * 2} //陣列裡每個元素都會*2

Reduce

這個比較難一點點,簡單來說是從原本集合中的所有元素,做一個運算,然後最後會回傳一個值。

var array = [9,8,7,1,2,4,3,5]   //創造一個陣列
let reduceArray = array.reduce(0, { $0 + $1 }) //從0,$0是上一個運算結果,$1是下一個元素。所以簡單來說就是把陣列全部加起來
let reduceArray2 = array.reduce(1, { $0 * $1 })  //回傳60480,把陣列全部相乘

let reduceArray2 = numbers.reduce(1, *)  //可以再簡短寫法

Contains

這個跟filter有點像,也是篩選你要的條件,但是它只會回傳一個布林值,也就是他只會回傳true或是false

var array = [9,8,7,1,2,4,3,5]   //創造一個陣列

let containsArray = array.contains{ $0 > 5 }  //是否有>5的元素,回傳true

上一篇
Day-20 最基礎的軟體架構模式 - MVC
下一篇
Day-22 單例模式 - Singleton
系列文
如何成為IOS初級工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言